﻿#define _CRT_SECURE_NO_WARNINGS 1

#include <iterator>
#include <string>
#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param s string字符串 第一个整数
     * @param t string字符串 第二个整数
     * @return string字符串
     */
    string solve(string s, string t)
    {
        //无进位相乘
        reverse(s.begin(), s.end());//先反转
        reverse(t.begin(), t.end());

        int m = s.size();//最大乘到m+n位数，注意不是和是m+n位数
        int n = t.size();
        vector<int> tmp(m + n, 0);

        for (int i = 0; i < m; ++i)
        {
            for (int j = 0; j < n; ++j)
            {
                tmp[i + j] += (s[i] - '0') * (t[j] - '0');//假设18*21，反转过来就是81*12，8乘1存到tmp[0+0]的位置，8*2存tmp[0+1]的位置，1*1存到tmp[1+0]位置，1*2存到tmp[1+1]位置，就是乘法竖式计算一样
            }
        }

        int c = 0;
        string result;
        for (auto e : tmp)//进位
        {
            c += e;
            result += c % 10 + '0';
            c /= 10;
        }

        while (c > 0)
        {
            result += c % 10 + '0';
            c /= 10;
        }

        while (result.size() > 1 && result.back() == '0')//处理前导0
            result.pop_back();

        reverse(result.begin(), result.end());//翻转

        return result;
    }
};

/*
描述
以字符串的形式读入两个数字，编写一个函数计算它们的乘积，以字符串形式返回。

示例1
输入：
"11","99"

返回值：
"1089"

说明：
11*99=1089
*/

